package com.haixiaoke.saas.order.state.server;

/**
 * 状态服务方-接口
 *
 * @author qixi
 */
public interface IOrderStateServerRole {

    /**
     * 入住
     */
    void sign();

    /**
     * 签约审核
     */
    void signAudit();

    /**
     * 审核通过
     */
    void approved();

    /**
     * 审核不通过
     */
    void disagree();

    /**
     * 预定变更
     */
    void changeOrder();

    /**
     * 订单作废
     */
    void cancel();

    /**
     * 退租
     */
    void refundRent();

    void refundRentAudit();

    /**
     * 续租
     */
    void relet();

    /**
     * 续租审核
     */
    void reletAudit();

    /**
     * 换房
     */
    void exchangeHouse();

    /**
     * 换房审核
     */
    void exchangeHouseAudit();

    /**
     * 转租
     */
    void sublease();


    void subleaseAudit();

    void houseInspection();

    void orderOvertime();

    void preOrderSignOvertime();

    /**
     * 待付款->待入住，续租-待付款->续租-已支付
     */
    int orderStayCheckIn(String remark);

    /**
     * 待付款->取消支付，续租-待付款->续租-取消支付
     */
    int orderCancellation(String recordSource,String recordReason);

    /**
     * 代入住->退订中
     */
    int cancelReservation(String recordSource,String recordReason);

    /**
     * 代入住->已入住
     */
    int orderCheckIn(String recordSource, Long userId);

    /**
     * 退订中->退订成功
     * @param recordSource
     * @param recordReason
     * @return
     */
    int unsubscribeSuccessfully(String recordSource,String recordReason);

    /**
     * 退订中->待入住
     * @param remark
     * @return
     */
    int unsubscribeFailureStayCheckIn(String remark);

    /**
     * 已入住->退房中
     *
     * @param recordSource
     * @param operatorId
     * @return
     */
    int orderCheckingOut(String recordSource, Long operatorId);

    /**
     * 退房中->已完成,续租-已支付->续租-已完成
     */
    int orderCompletion(String recordSource, Long operatorId);
}
